This is an exploratary analysis on foreign aid provided by USA.This aid given by the United States to other countries to support global peace, security, and development efforts, and provide humanitarian relief during times of crisis. It is a strategic, economic, and moral imperative for the United States and vital to U.S. national security.
You can read more via this link at
wikipedia
Which country gets the highest US aid

- More than 50% of the aid goes to 3 countries i.e Afghanistan, Israel, Iraq.
- Afghanistan and Iraq are likely due to the war and conflicts for a long time and nation rebuilding.
- Not sure on the aid to Israel.
- Pakistan is in the top 5 countries that takes aid for US.

- Middle east and Africa are the top regions where the aid is sent. Iraq, Afghanistan, Iran, Israel are all in middle east.
- Interestingly, none of the African countries are in the earlier top 5 chart.

- Most of the middle east and Africa will fall in the low income category.
- Interesting to see even high income countries are getting aid from USA, will analyze what sort of groups aid such countries.

- Department of Defense (DoD), the constant character in all the Hollywood action/war movies.













- India shows a spike during late 1950’s till 70’s. This is likely due to post India independence era.
- Pakistan is showing the spike at the same time but continues to show an ever increasing trend.
- Interesting to see that India never crossed the billion mark while Pakistan is consistently >1B since year 2000
LS0tCnRpdGxlOiAiVVMgRm9yZWlnbiBBaWQgQW5hbHlzaXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KClRoaXMgaXMgYW4gZXhwbG9yYXRhcnkgYW5hbHlzaXMgb24gZm9yZWlnbiBhaWQgcHJvdmlkZWQgYnkgVVNBLlRoaXMgYWlkIGdpdmVuIGJ5IHRoZSBVbml0ZWQgU3RhdGVzIHRvIG90aGVyIGNvdW50cmllcyB0byBzdXBwb3J0IGdsb2JhbCBwZWFjZSwgc2VjdXJpdHksIGFuZCBkZXZlbG9wbWVudCBlZmZvcnRzLCBhbmQgcHJvdmlkZSBodW1hbml0YXJpYW4gcmVsaWVmIGR1cmluZyB0aW1lcyBvZiBjcmlzaXMuIEl0IGlzIGEgc3RyYXRlZ2ljLCBlY29ub21pYywgYW5kIG1vcmFsIGltcGVyYXRpdmUgZm9yIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB2aXRhbCB0byBVLlMuIG5hdGlvbmFsIHNlY3VyaXR5LgoKWW91IGNhbiByZWFkIG1vcmUgdmlhIHRoaXMgbGluayBhdCBbd2lraXBlZGlhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vbml0ZWRfU3RhdGVzX2ZvcmVpZ25fYWlkICJ3aWtpcGVkaWEiKQo8aHI+CgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aD02LjEsIGZpZy5oZWlnaHQ9MyxmaWcuYWxpZ24gPSJjZW50ZXIiLGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHJvd3MucHJpbnQ9MzAsY29scy5wcmludD0xMCkKCiMgZmlnLmFzcD0wLjYxOAoKYGBgCgoKYGBge3IgbG9hZF9saWJzfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KGdyaWRFeHRyYSkKc291cmNlKCIvVXNlcnMvdmluYXljaHVyaS9WSU5BWS9WSU5BWV9SL3ZpbmF5X2Z1bmN0aW9ucy92aW5heV9mdW5jLlIiKQoKIyB0aGVtZV9zZXQodGhlbWVfZ3JheSgxMikgKyAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKSx0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCIpKSkKCnRoZW1lX3NldChnZ3RoZW1lczo6dGhlbWVfZml2ZXRoaXJ0eWVpZ2h0KDEyKSArICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpLHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIikpKQoKYGBgCgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CgpkZjwtIGZyZWFkKCIvVXNlcnMvdmluYXljaHVyaS9WSU5BWS9kYXRhc2V0L3VzX2ZvcmVpZ25fYWlkL3VzX2ZvcmVpZ25fYWlkX2NvbXBsZXRlLmNzdiIpCgpkZjwtIGphbml0b3I6OmNsZWFuX25hbWVzKGRmKQoKYGBgCgpgYGB7ciAsIGV2YWw9RkFMU0UsaW5jbHVkZT1GQUxTRX0Kc3RyKGRmKQpgYGAKCgpgYGB7ciBhbGxfZnVuY3Rpb25zfQpnZXRfY291bnRzPC0gZnVuY3Rpb24oaW5fZGYsaW5fY29scyx0b3BuPTEwKXsKICByZXR1cm4oaW5fZGZbLCAuKGZyZXE9Lk4pLCBieSA9IGMoaW5fY29scyldW29yZGVyKC1mcmVxKV1bMTp0b3BuXSkKICAKfQoKZ2V0X3RvcF8zMF9wZXI8LWZ1bmN0aW9uKGluX2R0LGxvdj1OQSxpbl9jb2xzPU5BLHRvcG49MTApewogIHRvcF8yMF9kZjwtZGF0YS5mcmFtZSgpCiAgZm9yKHggaW4gbG92KSB7CiAgICAjIHVzZSBnZXQoKSBvbiB2YXJpYWJsZQogICAgdG1wX2RmPC1pbl9kdFtnZXQoaW5fY29sc1sxXSk9PXgsLihmcmVxPS5OKSxieT1jKGluX2NvbHMpXVtvcmRlcigtZnJlcSldWzE6dG9wbl0KICAgIHRvcF8yMF9kZjwtYmluZF9yb3dzKHRvcF8yMF9kZix0bXBfZGYpCiAgICBybSh0bXBfZGYpCiAgfQogIHJldHVybih0b3BfMjBfZGYpCiAgCn0KCgpnZXRfYWlkX3N1bW08LWZ1bmN0aW9uKGRhdGE9aW5fZHQsaW5fY29sLHRvcG49MTAsdGl0bGUyPU5BKXsKICB0bXBfZGY9ZGZbLC4odG90X2FpZD1zdW0oYXMubnVtZXJpYyhjdXJyZW50X2Ftb3VudCkpLzFlOSksYnk9Yyhpbl9jb2wpXVtvcmRlcigtdG90X2FpZCldCiAgdG1wX2RmPXRtcF9kZltnZXQoaW5fY29sKSE9J1dvcmxkJywsXQogIHRtcF9kZj10bXBfZGZbLCJ0b3RhbF9wZXJjZW50YWdlIjo9cm91bmQodG90X2FpZC9zdW0odG90X2FpZCkqMTAwLDIpXQogICMgdG1wX2RmPWhlYWQodG1wX2RmLHRvcG4pCiAgIyB0bXBfZGY9dG1wX2RmWywidG9wbl9wZXJjZW50YWdlIjo9cm91bmQodG90X2FpZC9zdW0odG90X2FpZCkqMTAwLDIpXQogIHRtcF9kZj10bXBfZGZbLCJjdW1tdWxhdGl2ZV9wZXJjZW50YWdlIjo9Y3Vtc3VtKHRvdGFsX3BlcmNlbnRhZ2UpXSAjIyBjdW11bGF0aXZlIHBlcmNlbnRhZ2UKICB0b3Rfcm93czwtIG5yb3codG1wX2RmKQogIHRtcF9kZjwtaGVhZCh0bXBfZGYsdG9wbikKICB0b3BuPC1taW4odG9wbix0b3Rfcm93cykKCiAgIyBpbl9jb2w9ZW5xdW8oaW5fY29sKSAiaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjIzMDkyODUvaG93LXRvLXVzZS1hLXZhcmlhYmxlLXRvLXNwZWNpZnktY29sdW1uLW5hbWUtaW4tZ2dwbG90IgogIGluX2NvbDwtZW5zeW0oaW5fY29sKQogIHAxPC10bXBfZGYlPiUKICAgIGdncGxvdChhZXMocmVvcmRlcighIWluX2NvbCx0b3RfYWlkKSx0b3RfYWlkKSkrCiAgICBnZW9tX2NvbChmaWxsPSIjNDc3OUM3IikrCiAgICBjb29yZF9mbGlwKCkrCiAgICBsYWJzKHRpdGxlPXRpdGxlMixzdWJ0aXRsZT1wYXN0ZTAoIlRvcCAiLHRvcG4sIiBvZiAiLHRvdF9yb3dzKSx4PSIiLHk9IlRvdGFsIGFpZCBpbiBiaWxsaW9ucyIpKwogICAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6Y29tbWEpCiAgCiAgdGFiMTwtYXMuZGF0YS5mcmFtZSh0bXBfZGYlPiVzbGljZSgwOjUpKQogIAogIHJldHVybihsaXN0KCJwMSI9cDEsInRhYjEiPXRhYjEpKQogIAoKICAKfQoKYGBgCgoKCldoaWNoIGNvdW50cnkgZ2V0cyB0aGUgaGlnaGVzdCBVUyBhaWQKYGBge3IsZmlnLndpZHRoPTYuMSxmaWcuaGVpZ2h0PTN9Cm15X2xpc3Q8LWdldF9haWRfc3VtbShkYXRhPWRmLGluX2NvbD0iY291bnRyeV9uYW1lIix0b3BuPTE1LHRpdGxlMiA9ICJDb3VudHJ5IHdpc2UgYWlkIHN1bW1hcnkiKQpncmlkLmFycmFuZ2UobXlfbGlzdCRwMSx0YWJsZUdyb2IobXlfbGlzdCR0YWIxLHRoZW1lID0gdHRoZW1lX2RlZmF1bHQoYmFzZV9zaXplID0gMTApKSxoZWlnaHRzPWMoMywxKSkKCgpgYGAKCiogTW9yZSB0aGFuIDUwJSBvZiB0aGUgYWlkIGdvZXMgdG8gMyBjb3VudHJpZXMgaS5lIEFmZ2hhbmlzdGFuLCBJc3JhZWwsIElyYXEuCiogQWZnaGFuaXN0YW4gYW5kIElyYXEgYXJlIGxpa2VseSBkdWUgdG8gdGhlIHdhciBhbmQgY29uZmxpY3RzIGZvciBhIGxvbmcgdGltZSBhbmQgbmF0aW9uIHJlYnVpbGRpbmcuCiogTm90IHN1cmUgb24gdGhlIGFpZCB0byBJc3JhZWwuCiogUGFraXN0YW4gaXMgaW4gdGhlIHRvcCA1IGNvdW50cmllcyB0aGF0IHRha2VzIGFpZCBmb3IgVVMuCgo8YnI+PGhyPgoKYGBge3IsZmlnLndpZHRoPTYuMSxmaWcuaGVpZ2h0PTN9CgpteV9saXN0PC1nZXRfYWlkX3N1bW0oZGF0YT1kZixpbl9jb2w9YygicmVnaW9uX25hbWUiKSx0b3BuPTE1LHRpdGxlMiA9ICJSZWdpb24gd2lzZSBhaWQgc3VtbWFyeSIpCmdyaWQuYXJyYW5nZShteV9saXN0JHAxLHRhYmxlR3JvYihteV9saXN0JHRhYjEsdGhlbWUgPSB0dGhlbWVfZGVmYXVsdChiYXNlX3NpemUgPSAxMCkpLGhlaWdodHM9YygyLDEpKQoKCgpgYGAKCiogTWlkZGxlIGVhc3QgYW5kIEFmcmljYSBhcmUgdGhlIHRvcCByZWdpb25zIHdoZXJlIHRoZSBhaWQgaXMgc2VudC4gSXJhcSwgQWZnaGFuaXN0YW4sIElyYW4sIElzcmFlbCBhcmUgYWxsIGluIG1pZGRsZSBlYXN0LgoqIEludGVyZXN0aW5nbHksIG5vbmUgb2YgdGhlIEFmcmljYW4gY291bnRyaWVzIGFyZSBpbiB0aGUgZWFybGllciB0b3AgNSBjaGFydC4KCjxicj48aHI+CgoKYGBge3IsZmlnLndpZHRoPTYuMSxmaWcuaGVpZ2h0PTN9Cm15X2xpc3Q8LWdldF9haWRfc3VtbShkYXRhPWRmLGluX2NvbD1jKCJpbmNvbWVfZ3JvdXBfbmFtZSIpLHRvcG49MTUsdGl0bGUyID0gImluY29tZV9ncm91cF9uYW1lIHdpc2UgYWlkIHN1bW1hcnkiKQpncmlkLmFycmFuZ2UobXlfbGlzdCRwMSx0YWJsZUdyb2IobXlfbGlzdCR0YWIxLHRoZW1lID0gdHRoZW1lX2RlZmF1bHQoYmFzZV9zaXplID0gMTApKSxoZWlnaHRzPWMoMiwxKSkKIAoKCmBgYAoKKiBNb3N0IG9mIHRoZSBtaWRkbGUgZWFzdCBhbmQgQWZyaWNhIHdpbGwgZmFsbCBpbiB0aGUgbG93IGluY29tZSBjYXRlZ29yeS4KKiBJbnRlcmVzdGluZyB0byBzZWUgZXZlbiBoaWdoIGluY29tZSBjb3VudHJpZXMgYXJlIGdldHRpbmcgYWlkIGZyb20gVVNBLCB3aWxsIGFuYWx5emUgd2hhdCBzb3J0IG9mIGdyb3VwcyBhaWQgc3VjaCBjb3VudHJpZXMuCgoKPGJyPjxocj4KCmBgYHtyLGZpZy53aWR0aD02LjEsZmlnLmhlaWdodD0zfQpteV9saXN0PC1nZXRfYWlkX3N1bW0oZGF0YT1kZixpbl9jb2w9YygiaW1wbGVtZW50aW5nX2FnZW5jeV9uYW1lIiksdG9wbj0xNSx0aXRsZTIgPSAiaW1wbGVtZW50aW5nX2FnZW5jeV9uYW1lIHdpc2UgYWlkIHN1bW1hcnkiKQpncmlkLmFycmFuZ2UobXlfbGlzdCRwMSx0YWJsZUdyb2IobXlfbGlzdCR0YWIxLHRoZW1lID0gdHRoZW1lX2RlZmF1bHQoYmFzZV9zaXplID0gMTApKSxoZWlnaHRzPWMoMiwxKSkKCgoKYGBgCgoqIERlcGFydG1lbnQgb2YgRGVmZW5zZSAoRG9EKSwgdGhlIGNvbnN0YW50IGNoYXJhY3RlciBpbiBhbGwgdGhlIEhvbGx5d29vZCBhY3Rpb24vd2FyIG1vdmllcy4KCjxicj48aHI+CgpgYGB7cixmaWcud2lkdGg9Ni4xLGZpZy5oZWlnaHQ9M30KCm15X2xpc3Q8LWdldF9haWRfc3VtbShkYXRhPWRmLGluX2NvbD1jKCJzdWJhZ2VuY3lfbmFtZSIpLHRvcG49MTUsdGl0bGUyID0gInN1YmFnZW5jeV9uYW1lIHdpc2UgYWlkIHN1bW1hcnkiKQpncmlkLmFycmFuZ2UobXlfbGlzdCRwMSx0YWJsZUdyb2IobXlfbGlzdCR0YWIxLHRoZW1lID0gdHRoZW1lX2RlZmF1bHQoYmFzZV9zaXplID0gMTApKSxoZWlnaHRzPWMoMiwxKSkKCgpgYGAKCjxicj48aHI+CgpgYGB7cixmaWcud2lkdGg9Ni4xLGZpZy5oZWlnaHQ9M30KbXlfbGlzdDwtZ2V0X2FpZF9zdW1tKGRhdGE9ZGYsaW5fY29sPWMoImNoYW5uZWxfY2F0ZWdvcnlfbmFtZSIpLHRvcG49MTUsdGl0bGUyID0gImNoYW5uZWxfY2F0ZWdvcnlfbmFtZSB3aXNlIGFpZCBzdW1tYXJ5IikKZ3JpZC5hcnJhbmdlKG15X2xpc3QkcDEsdGFibGVHcm9iKG15X2xpc3QkdGFiMSx0aGVtZSA9IHR0aGVtZV9kZWZhdWx0KGJhc2Vfc2l6ZSA9IDEwKSksaGVpZ2h0cz1jKDIsMSkpCgoKYGBgCgo8YnI+PGhyPgoKCmBgYHtyLGZpZy53aWR0aD02LjEsZmlnLmhlaWdodD0zfQpteV9saXN0PC1nZXRfYWlkX3N1bW0oZGF0YT1kZixpbl9jb2w9YygiY2hhbm5lbF9zdWJjYXRlZ29yeV9uYW1lIiksdG9wbj0xNSx0aXRsZTIgPSAiY2hhbm5lbF9zdWJjYXRlZ29yeV9uYW1lIHdpc2UgYWlkIHN1bW1hcnkiKQpncmlkLmFycmFuZ2UobXlfbGlzdCRwMSx0YWJsZUdyb2IobXlfbGlzdCR0YWIxLHRoZW1lID0gdHRoZW1lX2RlZmF1bHQoYmFzZV9zaXplID0gMTApKSxoZWlnaHRzPWMoMiwxKSkKCgoKYGBgCgoKPGJyPjxocj4KCmBgYHtyLGZpZy53aWR0aD02LjEsZmlnLmhlaWdodD0zfQpteV9saXN0PC1nZXRfYWlkX3N1bW0oZGF0YT1kZixpbl9jb2w9YygiZGFjX2NhdGVnb3J5X25hbWUiKSx0b3BuPTE1LHRpdGxlMiA9ICJkYWNfY2F0ZWdvcnlfbmFtZSB3aXNlIGFpZCBzdW1tYXJ5IikKZ3JpZC5hcnJhbmdlKG15X2xpc3QkcDEsdGFibGVHcm9iKG15X2xpc3QkdGFiMSx0aGVtZSA9IHR0aGVtZV9kZWZhdWx0KGJhc2Vfc2l6ZSA9IDEwKSksaGVpZ2h0cz1jKDIsMSkpCgoKIApgYGAKCgo8YnI+PGhyPgoKYGBge3IsZmlnLndpZHRoPTYuMSxmaWcuaGVpZ2h0PTN9Cm15X2xpc3Q8LWdldF9haWRfc3VtbShkYXRhPWRmLGluX2NvbD1jKCJkYWNfc2VjdG9yX25hbWUiKSx0b3BuPTE1LHRpdGxlMiA9ICJkYWNfc2VjdG9yX25hbWUgd2lzZSBhaWQgc3VtbWFyeSIpCmdyaWQuYXJyYW5nZShteV9saXN0JHAxLHRhYmxlR3JvYihteV9saXN0JHRhYjEsdGhlbWUgPSB0dGhlbWVfZGVmYXVsdChiYXNlX3NpemUgPSAxMCkpLGhlaWdodHM9YygyLDEpKQoKCiAKYGBgCgoKPGJyPjxocj4KCmBgYHtyLGZpZy53aWR0aD02LjEsZmlnLmhlaWdodD0zfQpteV9saXN0PC1nZXRfYWlkX3N1bW0oZGF0YT1kZixpbl9jb2w9YygiZGFjX3B1cnBvc2VfbmFtZSIpLHRvcG49MTUsdGl0bGUyID0gImRhY19wdXJwb3NlX25hbWUgd2lzZSBhaWQgc3VtbWFyeSIpCmdyaWQuYXJyYW5nZShteV9saXN0JHAxLHRhYmxlR3JvYihteV9saXN0JHRhYjEsdGhlbWUgPSB0dGhlbWVfZGVmYXVsdChiYXNlX3NpemUgPSAxMCkpLGhlaWdodHM9YygyLDEpKQoKCgpgYGAKCgo8YnI+PGhyPgoKYGBge3IsZmlnLndpZHRoPTYuMSxmaWcuaGVpZ2h0PTN9Cm15X2xpc3Q8LWdldF9haWRfc3VtbShkYXRhPWRmLGluX2NvbD1jKCJmdW5kaW5nX2FjY291bnRfbmFtZSIpLHRvcG49MTUsdGl0bGUyID0gImZ1bmRpbmdfYWNjb3VudF9uYW1lIHdpc2UgYWlkIHN1bW1hcnkiKQpncmlkLmFycmFuZ2UobXlfbGlzdCRwMSx0YWJsZUdyb2IobXlfbGlzdCR0YWIxLHRoZW1lID0gdHRoZW1lX2RlZmF1bHQoYmFzZV9zaXplID0gMTApKSxoZWlnaHRzPWMoMiwxKSkKCgpgYGAKCgo8YnI+PGhyPgoKYGBge3IsZmlnLndpZHRoPTYuMSxmaWcuaGVpZ2h0PTN9Cm15X2xpc3Q8LWdldF9haWRfc3VtbShkYXRhPWRmLGluX2NvbD1jKCJmdW5kaW5nX2FnZW5jeV9uYW1lIiksdG9wbj0xNSx0aXRsZTIgPSAiZnVuZGluZ19hZ2VuY3lfbmFtZSB3aXNlIGFpZCBzdW1tYXJ5IikKZ3JpZC5hcnJhbmdlKG15X2xpc3QkcDEsdGFibGVHcm9iKG15X2xpc3QkdGFiMSx0aGVtZSA9IHR0aGVtZV9kZWZhdWx0KGJhc2Vfc2l6ZSA9IDEwKSksaGVpZ2h0cz1jKDIsMSkpCgoKCgpgYGAKCgo8YnI+PGhyPgoKYGBge3IsZmlnLndpZHRoPTYuMSxmaWcuaGVpZ2h0PTN9Cm15X2xpc3Q8LWdldF9haWRfc3VtbShkYXRhPWRmLGluX2NvbD1jKCJhaWRfdHlwZV9ncm91cF9uYW1lIiksdG9wbj0xNSx0aXRsZTIgPSAiYWlkX3R5cGVfZ3JvdXBfbmFtZSB3aXNlIGFpZCBzdW1tYXJ5IikKZ3JpZC5hcnJhbmdlKG15X2xpc3QkcDEsdGFibGVHcm9iKG15X2xpc3QkdGFiMSx0aGVtZSA9IHR0aGVtZV9kZWZhdWx0KGJhc2Vfc2l6ZSA9IDEwKSksaGVpZ2h0cz1jKDIsMSkpCgoKCmBgYAoKCjxicj48aHI+CgpgYGB7cixmaWcud2lkdGg9Ni4xLGZpZy5oZWlnaHQ9M30KbXlfbGlzdDwtZ2V0X2FpZF9zdW1tKGRhdGE9ZGYsaW5fY29sPWMoImFjdGl2aXR5X25hbWUiKSx0b3BuPTE1LHRpdGxlMiA9ICJhY3Rpdml0eV9uYW1lIHdpc2UgYWlkIHN1bW1hcnkiKQpncmlkLmFycmFuZ2UobXlfbGlzdCRwMSx0YWJsZUdyb2IobXlfbGlzdCR0YWIxLHRoZW1lID0gdHRoZW1lX2RlZmF1bHQoYmFzZV9zaXplID0gMTApKSxoZWlnaHRzPWMoMiwxKSkKCgoKYGBgCgo8YnI+PGhyPgoKCmBgYHtyLGZpZy53aWR0aD02LjEsZmlnLmhlaWdodD0zfQpteV9saXN0PC1nZXRfYWlkX3N1bW0oZGF0YT1kZixpbl9jb2w9YygidXNnX3NlY3Rvcl9uYW1lIiksdG9wbj0xNSx0aXRsZTIgPSAidXNnX3NlY3Rvcl9uYW1lIHdpc2UgYWlkIHN1bW1hcnkiKQpncmlkLmFycmFuZ2UobXlfbGlzdCRwMSx0YWJsZUdyb2IobXlfbGlzdCR0YWIxLHRoZW1lID0gdHRoZW1lX2RlZmF1bHQoYmFzZV9zaXplID0gMTApKSxoZWlnaHRzPWMoMiwxKSkKCgoKYGBgCgoKPGJyPjxocj4KCmBgYHtyfQpteV9saXN0PC1nZXRfYWlkX3N1bW0oZGF0YT1kZixpbl9jb2w9YygiYXNzaXN0YW5jZV9jYXRlZ29yeV9uYW1lIiksdG9wbj0xNSx0aXRsZTIgPSAiYXNzaXN0YW5jZV9jYXRlZ29yeV9uYW1lIHdpc2UgYWlkIHN1bW1hcnkiKQpncmlkLmFycmFuZ2UobXlfbGlzdCRwMSx0YWJsZUdyb2IobXlfbGlzdCR0YWIxLHRoZW1lID0gdHRoZW1lX2RlZmF1bHQoYmFzZV9zaXplID0gMTApKSxoZWlnaHRzPWMoMiwxKSkKCgpgYGAKCgo8YnI+PGhyPgoKYGBge3IsZmlnLndpZHRoPTYuMSxmaWcuaGVpZ2h0PTN9CmRmJT4lCiAgZmlsdGVyKGNvdW50cnlfbmFtZSAlaW4lIGMoIkluZGlhIiwiUGFraXN0YW4iKSklPiUKICBncm91cF9ieShjb3VudHJ5X25hbWUsZmlzY2FsX3llYXIpJT4lCiAgc3VtbWFyaXNlKHRvdF9haWQ9c3VtKGFzLm51bWVyaWMoY3VycmVudF9hbW91bnQpKS8xZTkpJT4lICAgICMgMWU5LSBiaWxsaW9uICwxZTY9bWlsbGlvbgogIG11dGF0ZShmaXNjYWxfeWVhcj1hcy5udW1lcmljKGlmZWxzZShmaXNjYWxfeWVhcj09JzE5NzZ0cScsIjE5NzYiLGZpc2NhbF95ZWFyKSkpJT4lCiAgZ2dwbG90KGFlcyhmaXNjYWxfeWVhcix0b3RfYWlkLGNvbG9yPWNvdW50cnlfbmFtZSkpKwogIGdlb21fbGluZSgpKwogIGxhYnModGl0bGU9IlRyZW5kcyBvZiBVUyBmb3JlaWduIGFpZCB0byBJbmRpYSBhbmQgUGFraXN0YW4iLHk9ImluIGJpbGxpb25zIix4PSIiKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQoKIyBwYXN0ZShyb3VuZCh4IC8gMWU2LCAxKSwgIk0iKQpgYGAKCiogSW5kaWEgc2hvd3MgYSBzcGlrZSBkdXJpbmcgbGF0ZSAxOTUwJ3MgdGlsbCA3MCdzLiBUaGlzIGlzIGxpa2VseSBkdWUgdG8gcG9zdCBJbmRpYSBpbmRlcGVuZGVuY2UgZXJhLgoqIFBha2lzdGFuIGlzIHNob3dpbmcgdGhlIHNwaWtlIGF0IHRoZSBzYW1lIHRpbWUgYnV0IGNvbnRpbnVlcyB0byBzaG93IGFuIGV2ZXIgaW5jcmVhc2luZyB0cmVuZC4KKiBJbnRlcmVzdGluZyB0byBzZWUgdGhhdCBJbmRpYSBuZXZlciBjcm9zc2VkIHRoZSBiaWxsaW9uIG1hcmsgd2hpbGUgUGFraXN0YW4gaXMgY29uc2lzdGVudGx5ID4xQiBzaW5jZSB5ZWFyIDIwMDAKCgpgYGB7ciAsIGluY2x1ZGU9RkFMU0UsZXZhbD1GQUxTRSxmaWcud2lkdGg9Ni4xfQojIFNhdCBBdWcgMTcgMTc6MTE6MTYgMjAxOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUNPTU1FTlRTSEVSRS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpkZlssLih0b3RfYWlkPXN1bShhcy5udW1lcmljKGN1cnJlbnRfYW1vdW50KS8xMDAwMDAwKSksYnk9LihpbXBsZW1lbnRpbmdfYWdlbmN5X25hbWUpXVtvcmRlcigtdG90X2FpZCldWzE6NV0KCmR0MTwtZGZbLC4odG90X2FpZD1zdW0oYXMubnVtZXJpYyhjdXJyZW50X2Ftb3VudCkpKSxieT0uKGltcGxlbWVudGluZ19hZ2VuY3lfbmFtZSldW29yZGVyKC10b3RfYWlkKV1bMTo1XQpkdDI8LWRmJT4lCiAgZ3JvdXBfYnkoaW1wbGVtZW50aW5nX2FnZW5jeV9uYW1lKSU+JQogIHN1bW1hcmlzZSh0b3RfYWlkPXN1bShjdXJyZW50X2Ftb3VudCkpJT4lCiAgZmlsdGVyKGltcGxlbWVudGluZ19hZ2VuY3lfbmFtZSE9J1dvcmxkJyklPiUKICBhcnJhbmdlKC10b3RfYWlkKSU+JQogIHNsaWNlKDE6NSklPiUKICBtdXRhdGUodG90X2FpZD10b3RfYWlkLzEwMDAwMDApCgpyZXM9bWljcm9iZW5jaG1hcms6Om1pY3JvYmVuY2htYXJrKGR0MSxkdDIsdGltZXM9MTAwKQphdXRvcGxvdChyZXMpCnBsb3QocmVzKQoKCnRhYmxlKGRmJGZpc2NhbF95ZWFyKQoKZGYlPiUKICBmaWx0ZXIoY291bnRyeV9uYW1lICVpbiUgYygiSW5kaWEiLCJQYWtpc3RhbiIpKSU+JQogIGdyb3VwX2J5KGNvdW50cnlfbmFtZSxmaXNjYWxfeWVhciklPiUKICBzdW1tYXJpc2UodG90X2FpZD1zdW0oYXMubnVtZXJpYyhjdXJyZW50X2Ftb3VudCkpLzEwMDAwMDApJT4lCiAgcmVzaGFwZTI6OmRjYXN0KGZpc2NhbF95ZWFyfmNvdW50cnlfbmFtZSx2YWx1ZS52YXI9InRvdF9haWQiLGZpbGw9MCklPiUKICBnZ3Bsb3QoYWVzKGZpc2NhbF95ZWFyKSkrCiAgZ2VvbV9saW5lKGFlcyh5ID0gInRvdF9haWQiKSxncm91cD0xLCBjb2xvdXIgPSAiYmx1ZSIpKwogIGdlb21fbGluZShhZXMoeSA9ICJ0b3RfYWlkIiksZ3JvdXA9MSwgY29sb3VyID0gInJlZCIpKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpCiAgIyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9uIikKCgoKZGYlPiUKICBmaWx0ZXIoY291bnRyeV9uYW1lICVpbiUgYygiSW5kaWEiLCJQYWtpc3RhbiIpKSU+JQogIGdyb3VwX2J5KGNvdW50cnlfbmFtZSxmaXNjYWxfeWVhciklPiUKICBzdW1tYXJpc2UodG90X2FpZD1zdW0oYXMubnVtZXJpYyhjdXJyZW50X2Ftb3VudCkpLzEwMDAwMDApJT4lCiAgcmVzaGFwZTI6OmRjYXN0KGZpc2NhbF95ZWFyfmNvdW50cnlfbmFtZSx2YWx1ZS52YXI9InRvdF9haWQiLGZpbGw9MCklPiUKICBnZ3Bsb3QoYWVzKGZpc2NhbF95ZWFyLEluZGlhLGNvbG9yPSJibHVlIikpKwogIGdlb21fbGluZShncm91cD0xKSsKICBnZW9tX2xpbmUoYWVzKGZpc2NhbF95ZWFyLFBha2lzdGFuLGNvbG9yPSJyZWQiKSxncm91cD0xKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQoKCgpkZiU+JQogIGZpbHRlcihjb3VudHJ5X25hbWUgJWluJSBjKCJJbmRpYSIsIlBha2lzdGFuIikpJT4lCiAgZ3JvdXBfYnkoY291bnRyeV9uYW1lLGZpc2NhbF95ZWFyKSU+JQogIHN1bW1hcmlzZSh0b3RfYWlkPXN1bShhcy5udW1lcmljKGN1cnJlbnRfYW1vdW50KSkvMTAwMDAwMCklPiUKICBtdXRhdGUoZmlzY2FsX3llYXI9YXMubnVtZXJpYyhpZmVsc2UoZmlzY2FsX3llYXI9PScxOTc2dHEnLCIxOTc2IixmaXNjYWxfeWVhcikpKSU+JQogIGdncGxvdChhZXMoZmlzY2FsX3llYXIsdG90X2FpZCxjb2xvcj1jb3VudHJ5X25hbWUpKSsKICBnZW9tX2xpbmUoKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQoKCgpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkoZ2d0aGVtZXMpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeShnZ2FuaW1hdGUpCgoKCmRmJT4lCiAgZmlsdGVyKGNvdW50cnlfY29kZSAlaW4lIGMoIklOIiwiUEFLIikpJT4lCiAgZ3JvdXBfYnkoY291bnRyeV9jb2RlLGZpc2NhbF95ZWFyKSU+JQogIHN1bW1hcmlzZSh0b3RfYWlkPXN1bShhcy5udW1lcmljKGN1cnJlbnRfYW1vdW50KSkvMTAwMDAwMCklPiUKICBtdXRhdGUoZmlzY2FsX3llYXI9YXMubnVtZXJpYyhpZmVsc2UoZmlzY2FsX3llYXI9PScxOTc2dHEnLCIxOTc2IixmaXNjYWxfeWVhcikpKSU+JQogIHVuZ3JvdXAoKSU+JQogIGdyb3VwX2J5KGZpc2NhbF95ZWFyKSAlPiUKICBtdXRhdGUob3JkZXJpbmcgPSByYW5rKHRvdF9haWQpKSAlPiUKICB1bmdyb3VwKCktPnBsb3RkYXRhCgogIAogIAoKCiMgcGxvdGRhdGEgPC0gZGYuR0RQcGVyY2FwICU+JQojICAgZ3JvdXBfYnkoeWVhcikgJT4lCiMgICBtdXRhdGUob3JkZXJpbmcgPSByYW5rKEdEUHBlcmNhcCkpICU+JQojICAgdW5ncm91cCgpIAojIApwPC1nZ3Bsb3QocGxvdGRhdGEsCiAgICAgICBhZXMob3JkZXJpbmcsIGdyb3VwID0gY291bnRyeV9jb2RlLGNvbG9yPWNvdW50cnlfY29kZSxmaWxsPWNvdW50cnlfY29kZSkpICsKICBnZW9tX3RpbGUoYWVzKHkgPSB0b3RfYWlkLzIsaGVpZ2h0ID0gdG90X2FpZCwgd2lkdGggPSAwLjkpLCBhbHBoYSA9IDAuOSkgKwogICMgdGV4dCBvbiB0b3Agb2YgYmFycwogIGdlb21fdGV4dChhZXMoeSA9IHRvdF9haWQsIGxhYmVsID0gY291bnRyeV9jb2RlKSwgaGp1c3QgPSAtMC40KSArCiAgIyB0ZXh0IGluIHgtYXhpcyAocmVxdWlyZXMgY2xpcCA9ICJvZmYiIGluIGNvb3JkX2NhcnRlc2lhbikKICBnZW9tX3RleHQoYWVzKHkgPSAwLCBsYWJlbCA9IGNvdW50cnlfY29kZSksIGhqdXN0ID0gMS40KSArCiAgY29vcmRfZmxpcChjbGlwID0gIm9mZiIsIGV4cGFuZCA9IEZBTFNFKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpc19kKG5hbWU9IiIpKwogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKG5hbWU9IiIpKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHM9c2NhbGVzOjpkb2xsYXIpKwogIHRoZW1lX3R1ZnRlKDE0LCJBdmVuaXIiKSsKICBndWlkZXMoY29sb3I9RixmaWxsPUYpKwogIGxhYnModGl0bGU9J3tmcmFtZV90aW1lfScsIHggPSAiIix5PSJVUyBGb3JlaWduIGFpZCAoJDIwMTIpIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAxLCBzaXplID0gMjIpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRleHQueSAgPSBlbGVtZW50X2JsYW5rKCkpICsgCiAgdHJhbnNpdGlvbl90aW1lKHllYXIpKwogIGVhc2VfYWVzKCdjdWJpYy1pbi1vdXQnKQoKYW5pbWF0ZShwLCBuZnJhbWVzID0gMTAwLCBmcHMgPSA1LCBlbmRfcGF1c2UgPSAyMCkgI2FnYWluLCB1c2UgYW5pbV9zYXZlKGZpbGVuYW1lKSB0byBzYXZlCgoKCgpgYGAKCgo=